<?php

namespace Database\Seeders;

use App\Models\Role;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class DatabaseSeeder extends Seeder
{
    // 默认团队组 1个人、2企业、未分配访客
    private $current_team_id;

    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        // 设置个人组
        $this->current_team_id = 1;
        // 角色方式定义会员
        $arrayOfRoleNames = ['member', 'vip_member'];
        $roles = $this->mapRoles($arrayOfRoleNames);

        // 批量插入角色
        Role::insert($roles);

        /**
         * 角色权限范围
         */
        $permissionsByRole = [
            // 普通会员
            'member' => [
                'view a post',
                'create a post',
                'update a post',
                'delete a post'
            ],
            // VIP会员
            'vip_member' => [
                'view all posts',
                'restore posts',
                'force delete posts'
            ]
        ];

        // 生成角色
        $insertPermissions = fn($role) => collect($permissionsByRole[$role])
            ->map(fn($name) => DB::table('permissions')->insertGetId(['name' => $name, 'guard_name' => 'user']))
            ->toArray();

        $permissionIdsByRole = [
            // 会员
            'member' => $insertPermissions('member'),
            // VIP会员
            'vip_member' => $insertPermissions('vip_member')
        ];

        foreach ($permissionIdsByRole as $role => $permissionIds) {
            // 角色
            $role = Role::whereName($role, 'user')->first();
            // 角色、权限进行绑定
            DB::table('role_has_permissions')
                ->insert(
                    collect($permissionIds)->map(fn ($id) => [
                        'role_id' => $role->id,
                        'permission_id' => $id
                    ])->toArray()
                );
        }


        // // 企业组
        // $this->current_team_id = 2;
        // // 角色方式定义企业
        // $arrayOfRoleNames = ['enterprise', 'vip_enterprise'];
        // $roles = $this->mapRoles($arrayOfRoleNames);

        // // 批量插入角色
        // Role::insert($roles);

        // /**
        //  * 角色权限范围
        //  */
        // $permissionsByRole = [
        //     // 会员
        //     'enterprise' => [
        //         'view all authorizations',
        //         'view a authorization'
        //     ],
        //     'vip_enterprise' => [
        //         'view all authorizations',
        //         'view a authorization'
        //     ]
        // ];

        // // 生成角色
        // $insertPermissions = fn ($role) => collect($permissionsByRole[$role])
        //     ->map(fn ($name) => DB::table('permissions')->insertGetId(['name' => $name, 'guard_name' => 'user']))
        //     ->toArray();


        // $permissionIdsByRole = [
        //     // 管理
        //     'admin' => $insertPermissions('admin'),
        //     // 分销
        //     'distributor' => $insertPermissions('distributor'),
        //     // 会员
        //     'member' => $insertPermissions('member')
        // ];

        // foreach ($permissionIdsByRole as $role => $permissionIds) {
        //     // 角色
        //     $role = Role::whereName($role, 'user')->first();
        //     // 角色、权限进行绑定
        //     DB::table('role_has_permissions')
        //         ->insert(
        //             collect($permissionIds)->map(fn ($id) => [
        //                 'role_id' => $role->id,
        //                 'permission_id' => $id
        //             ])->toArray()
        //         );
        // }

        $data = $this->initData();
        // 插入数据
        DB::table('systems')->insert($data);
    }

    /**
     * Summary of mapRoles
     *
     * @param array $arrayOfRoleNames
     * @return array
     */
    private function mapRoles(array $arrayOfRoleNames)
    {
        return collect($arrayOfRoleNames)->map(fn ($role) => ['name' => $role, 'team_id' => $this->current_team_id, 'guard_name' => 'user'])
            ->toArray();
    }

    private function initData()
    {
        // 系统基础配制
        ['name' => $systemName, 'url' => $siteUrl] = config('app');

        return [
            // 网站名称
            ['key' => 'site_name', 'value' => $systemName, 'is_cached' => true],
            ['key' => 'site_keywords', 'value' => '闽南建材网,网站建设,闽建网', 'is_cached' => true],
            ['key' => 'site_description', 'value' => '闽建网(mnjc.com.cn) - 专注建材行业设计、网站建设', 'is_cached' => true],
            // 网站域名
            ['key' => 'site_url', 'value' => $siteUrl, 'is_cached' => true],
            // 管理员邮箱
            ['key' => 'email', 'value' => 'cighsen02@163.com', 'is_cached' => true],
            // 每页显示的记录数量
            ['key' => 'items_per_page', 'value' => 12, 'is_cached' => true],
            // 允许的最大登录尝试次数
            ['key' => 'max_login_attempts', 'value' => 10, 'is_cached' => true]
        ];
    }
}
